/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.process;

import com.camachosanchez.bean.ControlCambioNeumatico;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author ZULLY
 */
public class VehiculoOrdenadoPorCodigo implements Comparable<VehiculoOrdenadoPorCodigo> {

    private String codigo;
    private ControlCambioNeumatico controlCambio;
    
    public VehiculoOrdenadoPorCodigo(String codigo, ControlCambioNeumatico controlCambio) {
        this.codigo = codigo;
        this.controlCambio = controlCambio;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public ControlCambioNeumatico getControlCambio() {
        return controlCambio;
    }

    public void setControlCambio(ControlCambioNeumatico controlCambio) {
        this.controlCambio = controlCambio;
    }
    
    public static List<VehiculoOrdenadoPorCodigo> ordenar(List<VehiculoOrdenadoPorCodigo> lstNoOrdenada) {
        List<VehiculoOrdenadoPorCodigo> cabezales = new ArrayList<VehiculoOrdenadoPorCodigo>();
        List<VehiculoOrdenadoPorCodigo> semiremolques = new ArrayList<VehiculoOrdenadoPorCodigo>();
        List<VehiculoOrdenadoPorCodigo> normales = new ArrayList<VehiculoOrdenadoPorCodigo>();
        List<VehiculoOrdenadoPorCodigo> finales = new ArrayList<VehiculoOrdenadoPorCodigo>();
        for (VehiculoOrdenadoPorCodigo vehiculo : lstNoOrdenada) {
            if (vehiculo.getCodigo().toUpperCase().startsWith("R")) {
                cabezales.add(vehiculo);
            } else if (vehiculo.getCodigo().toUpperCase().startsWith("S")) {
                semiremolques.add(vehiculo);
            } else {
                normales.add(vehiculo);
            }
        }
        Collections.sort(cabezales);
        Collections.sort(normales);
        for (VehiculoOrdenadoPorCodigo cabezal : cabezales) {
            //Busco su correspondiente en los semiremolques
            finales.add(cabezal);
            String codigoCabezal = cabezal.getCodigo();
            String indice = "";
            if (codigoCabezal.length() > 1) {
                indice = "" + codigoCabezal.substring(1).trim();
            }
            int eliminado = 0;
            for (VehiculoOrdenadoPorCodigo s : semiremolques) {
                if (s.getCodigo().trim().toUpperCase().compareTo("S" + indice) == 0) {
                    finales.add(s);
                    eliminado = semiremolques.indexOf(s);
                    break;
                }
            }
            //Eliminamos el semiremolque agregado
            if(!semiremolques.isEmpty()) {
                semiremolques.remove(eliminado);
            }
        }
        finales.addAll(semiremolques);//agregamos los semiremolques restantes
        finales.addAll(normales);
        
        return finales;
    }
    
    
    @Override
    public String toString() {
        return codigo + "\t" + controlCambio.getIdVehiculo().getCodBarras();
    }
    
    @Override
    public int compareTo(VehiculoOrdenadoPorCodigo o) {
        return this.getCodigo().compareTo(o.getCodigo());
    }
    
}
